package com.yc.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.yc.common.handler.MapResultHandler;
import com.yc.entity.ClassInfo;
import com.yc.entity.StudentInfo;
import io.swagger.models.auth.In;
import com.yc.entity.User;
import com.yc.vo.Result;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.List;

import java.util.Map;
import java.util.Set;

/**
 * 班级表;(class_info)表数据库访问层
 * @date : 2023-6-27
 */
@Mapper
public interface ClassInfoMapper  extends BaseMapper<ClassInfo> {
    /**
    *@Description 分页查询
    *@Return
    *@Author dm
    *@Date Created in 2023/7/31 15:22
    **/
    List<ClassInfo> queryByPage(@Param("begin")Integer begin,@Param("end")Integer end,
                                @Param("classInfo")ClassInfo classInfo);

    /**
     *@Description 分页查询
     *@Return
     *@Author dm
     *@Date Created in 2023/7/31 15:22
     **/
    Long selectCount(@Param("classInfo")ClassInfo classInfo);

    /**
     * 分页查询指定行数据
     * @param page 分页参数
     * @param wrapper 动态查询条件
     * @return 分页对象列表
     */
    IPage<ClassInfo> selectByPage(IPage<ClassInfo> page , @Param(Constants.WRAPPER) Wrapper<ClassInfo> wrapper);

    /**
     * 根据班级名称查询id
     * @param cname
     * @return
     */
    @Select("select id from class_info where cname= #{cname} ")
    Integer selectIdByCname( @Param("cname") String cname);

    /**
     * 查班级名，根据classid
     * @param cid
     * @return
     */
    @Select("select cname  from class_info where id = #{cid} ")
    String classNameBycid( @Param("cid") String cid);

    /**
     * 查询入学年份
     * @return
     */
    @Select("SELECT DISTINCT yearnumber FROM class_info")
    List<String> queryYearnumber();

    /**
     * 查询辅导员姓名，班级总人数
     * @param cid
     * @return
     */
    @Select("select s.nickname,COUNT(t.id) AS total FROM class_info c INNER JOIN systemuser s ON c.counselor =s.username INNER JOIN student_info t on c.id =t.cid  WHERE c.id = #{cid}")
    Map<String,Object> queryInfo( @Param("cid") String cid);
    /**
     *  查询班级和专业
     * @param mname
     * @param year
     * @return
     */
    List<String> selectClassByMajorAndYear(@Param("mname") String mname,@Param("year") String year);



    /**
     * 新增学生之前判断该学生的班级是否存在
     * @param cname 班级名
     * @return
     */
    ClassInfo selectByCname(String cname);

    /**
     * 查询所有的班级名和id
     * @param mapResultHandler 结果集
     * @param counselor 辅导员id
     * @param teacherId 上课老师id
     */
    void selectAllCname(MapResultHandler<String, String> mapResultHandler, @Param("counselor") String counselor,
                        @Param("teacherId") String teacherId);

    List<String> selectAllClass(@Param("id") String id);

    /**
     * 通过班级名称查询单条数据
     *
     * @param cname 班级名称
     * @return 实例对象
     */
    ClassInfo queryByName(String cname);

    /**
    *@Description 查询辅导员带班的考勤信息
    *@Return
    *@Author dm
    *@Date Created in 2023/7/21 23:49
    **/
    List<String> selectClassInfo(@Param("id") String teacherId);

    /**
     * 添加班级信息
     * @param classInfo 班级信息
     * @return
     */
    int addClass(ClassInfo classInfo);

    /**
     * 通过老师工号查询当前时间上课的班级
     * @param username 老师工号
     * @return 当前上课的班级
     */
    List<ClassInfo> selectCnameByTeacherId(String username);

    /**
     * 查询入学年份和班级名称
     * @return
     */
    @Select("select cname,yearnumber from class_info")
    List<ClassInfo> selectList();


    /**
     * 通过教师Id查询当前时间上课的班级
     * @param teacherId 教师Id
     * @return 当前上课的班级
     */
    List<ClassInfo> selectClassByTeacherId(@Param("teacherId") String teacherId);

    /**
     * 根据学生账号来查询班级id
     * @param stuid 学生账号
     * @return
     */
    @Select("select cid from student_info where stuid = #{stuid}")
    StudentInfo selectCidByStuid(String stuid);

    @Select("select count(*) from student_info where cid=#{cid}")
    Integer count(String cid);


    @Select("SELECT\n" +
            "            mi.mname AS 'mname',\n" +
            "              GROUP_CONCAT(ci.cname ORDER BY ci.cname ASC) AS 'cname'\n" +
            "            FROM\n" +
            "               major_info mi\n" +
            "            JOIN\n" +
            "                class_info ci ON mi.id = ci.majorId\n" +
            "						WHERE ci.status = 1\n" +
            "            GROUP BY\n" +
            "                mi.mname\n" +
            "            ORDER BY\n" +
            "                mi.mname;")
    List<Map<String,Object>> selectBanji();

    List<Integer> selectCidByMname( @Param("mname") String mname);

    //查重班级名称
    int queryEqClass(@Param("cname") String cname);
}
